package client

import (
	"communication-system/common/message"
	"encoding/binary"
	"encoding/json"
	"fmt"
	"net"
)

// 写一个函数，完成登录
func login(userId int, userPwd string) (err error) {
	// 下一步就要开始定协议。。。
	//fmt.Printf("userId %d userPwd %s \n", userId, userPwd)
	//return nil
	// 1. 连接到服务器
	conn, err := net.Dial("tcp", "127.0.0.1:8889")
	if err != nil {
		fmt.Println("net.Dial err:", err)
		return err
	}

	defer func() {
		_ = conn.Close()
	}()

	// 2. 准备通过conn发送消息给服务器
	var mes message.Message
	mes.Type = message.LoginMesType

	// 3. 创建一个LoginMes结构体
	var loginMes message.LoginMes
	loginMes.UserId = userId
	loginMes.UserPwd = userPwd

	// 4. 将loginMes序列化
	data, err := json.Marshal(loginMes)
	if err != nil {
		fmt.Println("json.Marshal err:", err)
		return err
	}
	mes.Data = string(data)

	// 6. 将mes进行序列化
	data, err = json.Marshal(mes)
	if err != nil {
		fmt.Println("json.Marshal err:", err)
		return err
	}

	// 7. data是要发送的数据
	// 7.1 将data的长度发送给服务器
	// 先获取data的长度，并转成可以表示长度的byte切片
	var pkgLen uint32
	pkgLen = uint32(len(data))
	var buffer [4]byte
	binary.BigEndian.PutUint32(buffer[0:4], pkgLen)
	n, err := conn.Write(buffer[0:4])
	if n != 4 || err != nil {
		fmt.Println("conn.Write err:", err)
		return err
	}

	fmt.Printf("客户端，发送消息长度=%d\n", len(data))

	return nil
}
